#include <time.h>
#include <stdbool.h>

// 状态维持持续时长检测结构体
typedef struct {
    bool last_state;         // 上一次状态（是否满足条件）
    time_t start_time;       // 满足条件的起始时间
    bool is_maintaining;     // 当前是否处于持续状态
} maintain_state_t;

// 初始化状态检测结构体
void maintain_state_init(maintain_state_t *ms) {
    if (ms) {
        ms->last_state = false;
        ms->start_time = 0;
        ms->is_maintaining = false;
    }
}

// 检查某状态是否已持续指定秒数
// 参数：
//   ms: 状态检测结构体指针
//   current_state: 当前条件是否满足（如温度>30）
//   duration_sec: 需要持续的秒数（如5分钟=300秒）
// 返回：
//   true  - 已持续满足
//   false - 未持续满足
bool maintain_state_check(maintain_state_t *ms, bool current_state, int duration_sec) {
    time_t now = time(NULL);
    if (!ms) return false;

    if (current_state) {
        if (!ms->last_state) {
            // 第一次满足条件，记录起始时间
            ms->start_time = now;
            ms->is_maintaining = false;
        } else {
            // 已经在持续，检查时间
            if (!ms->is_maintaining && (now - ms->start_time >= duration_sec)) {
                ms->is_maintaining = true;
            }
        }
    } else {
        // 条件不满足，重置
        ms->start_time = 0;
        ms->is_maintaining = false;
    }
    ms->last_state = current_state;
    return ms->is_maintaining;
}

/*
用法示例：

maintain_state_t temp_state;
maintain_state_init(&temp_state);

while (1) {
    float temp = get_temperature(); // 获取当前温度
    bool over_30 = (temp > 30.0);
    if (maintain_state_check(&temp_state, over_30, 300)) {
        // 温度已持续5分钟高于30度
        printf("温度已持续5分钟高于30度\n");
    }
    sleep(1);
}
*/
